package com.team2.outpatient_sys.service.impl;

import com.team2.outpatient_sys.dao.AuthorityDao;
import com.team2.outpatient_sys.dao.RoleDao;
import com.team2.outpatient_sys.pojo.Authority;
import com.team2.outpatient_sys.pojo.Role;
import com.team2.outpatient_sys.service.AdminRoleAuthorityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class AdminRoleAuthorityServiceImpl implements AdminRoleAuthorityService {
    @Autowired
    private RoleDao roleDao;
    @Autowired
    private AuthorityDao authorityDao;

    /**
     * 获取所有角色信息的服务的实现
     * @return 获取到的所有角色信息的封装对象的集合
     */
    @Override
    public List<Role> getAllRole() {
        return roleDao.queryAll();
    }

    /**
     * 获取所有权限信息的服务的实现
     * @return 获取到的所有权限信息的封装对象的集合
     */
    @Override
    public List<Authority> getAllAuthority() {
        return authorityDao.queryAll();
    }

    /**
     * 根据角色id查询指定角色所拥有的权限信息的服务的实现
     * @param roleId 需要查询的角色的id值
     * @return 查询到的指定角色的权限封装对象的集合
     */
    @Override
    public List<Authority> getAuthoritiesByRoleId(Integer roleId) {
        return roleDao.queryAuthoritiesById(roleId);
    }

    /**
     * 根据角色id修改角色拥有的权限的服务的实现
     * @param roleId 角色的id
     * @param authorityList 应该拥有的权限的集合
     * @return 是否成功修改角色权限的真值
     */
    @Override
    @Transactional
    public boolean updateRoleAuthorityByRoleId(Integer roleId, List<Authority> authorityList) {
        roleDao.deleteAuthorityById(roleId);
        if (authorityList.size() > 0) {
            for (Authority authority : authorityList) {
                int affectedRows = roleDao.insertAuthority(roleId, authority.getId());
                if (affectedRows < 1)
                    throw new RuntimeException("修改角色权限:insert失败");
            }
        }
        return true;
    }
}
